PROJ=linux_baremetal
include Makefile

#########################################	AMP Linux/Baremetal App

.PHONY: proj_all
proj_all: $(BIN_DIR)/sparrow.bin $(BIN_DIR)/sparrow.txt $(BIN_DIR)/sparrow.map \
           $(BIN_DIR)/u-boot.scr dumpLogScript

srcs = \
	$(SRC_DIR)/startup.S \
	$(SRC_DIR)/reset.c \
	$(SRC_DIR)/resetS.S \
	$(SRC_DIR)/log_buffer.c \
	$(SRC_DIR)/scu.c \
	$(SRC_DIR)/scuS.S \
	$(SRC_DIR)/mempool.c \
	$(SRC_DIR)/gic.c \
	$(SRC_DIR)/gicS.S \
	$(SRC_DIR)/cache.c \
	$(SRC_DIR)/cacheS.S \
	$(SRC_DIR)/trustzone.c \
	$(SRC_DIR)/trustzoneS.S \
	$(SRC_DIR)/neon.c \
	$(GEN_DIR)/Layout.c \
	$(QCOM_DIR)/qcom.c \
	$(PROJ_DIR)/main.c \
	$(PROJ_DIR)/baremetal_app.c \
	$(HWLIB_DIR)/alt_mmu.c \
	$(HWLIB_DIR)/alt_cache.c \
	$(HWLIBS_DIR)/alt_clock_manager.c \
	$(HWLIBS_DIR)/alt_timers.c \
	$(HWLIBS_DIR)/alt_globaltmr.c \
	$(HWLIBS_DIR)/alt_watchdog.c \
	$(alt_interrupt_srcs) \
	$(srcs_hosting)

#CCFLAGS += -DPRINTF_UART

objs = $(call src_2_obj,$(OBJ_DIR),$(srcs))

$(BIN_DIR)/sparrow.axf: $(OBJ_DIR) $(BIN_DIR) $(objs)
	$(SIL)$(LD) $(LDFLAGS) -o $@ $(objs) $(LD_SET_ADDRESS)`$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) -var 'sparrow.Executable.Start'`

$(LINUX_OBJ_DIR):
	$(SIL)$(MKDIR) $@

.PHONY: ledset 
ledset: $(LINUX_OBJ_DIR)/ledset

# baremetal side of qcom
$(OBJ_DIR)/qcom.o: $(QCOM_DIR)/qcom.c
	$(SIL)$(CC) $(CCFLAGS) -o $@ $< \
		-DPHYS_MEM_ADDR=`$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) \
					-var 'sparrow.Shared_Comm_Channel.Address'` \
		-DMEM_SIZE=`$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) \
					-var 'sparrow.Shared_Comm_Channel.Size'`

# Linux app to talk with baremetal
$(LINUX_OBJ_DIR)/qcom.o: $(QCOM_DIR)/qcom.c $(LINUX_OBJ_DIR)
	$(SIL)$(CC) -c $(LINUX_CFLAGS) -o $@ $<

$(LINUX_OBJ_DIR)/ledset.o: src/qcom/ledset.c $(LINUX_OBJ_DIR)
	$(SIL)$(CC) -c $(LINUX_CFLAGS) -o $@ $< -Isrc/linux_baremetal \
                -DPHYS_MEM_ADDR=`$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) \
                                        -var 'Linux.Shared_Comm_Channel.Address'` \
                -DMEM_SIZE=`$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) \
                                        -var 'Linux.Shared_Comm_Channel.Size'`

$(LINUX_OBJ_DIR)/ledset: $(LINUX_OBJ_DIR)/qcom.o $(LINUX_OBJ_DIR)/ledset.o
	$(SIL)$(CC) $(CFLAGS) -o $@ $^

.PHONY: dumpLogScript
dumpLogScript: $(BIN_DIR)/dumpLog.sh

.PHONY: dumpLog
dumpLog: $(LINUX_OBJ_DIR)/dumpLog

$(BIN_DIR)/dumpLog.sh: $(BIN_DIR)
	@echo "dumpLog `$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) \
		-var 'Linux.OS1_s_Log_Buffer.Address'` \
		`$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) \
		-var 'Linux.OS1_s_Log_Buffer.Size'`" > $@
	@chmod u+x $@

$(LINUX_OBJ_DIR)/dumpLog: src/qcom/dumpLog.c $(LINUX_OBJ_DIR)
	$(SIL)$(CC) $(LINUX_CFLAGS) -o $@ $< \
		-DLOG_ADDRESS=`$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) \
		-var 'Linux.OS1_s_Log_Buffer.Address'` \
		-DLOG_SIZE=`$(PYTHON) $(PYSCRIPT) $(PROJSCRIPT) $(PYOPTS) \
		-var 'Linux.OS1_s_Log_Buffer.Size'`

